《编程之美》学习笔记


师兄留下了《编程之美》,今天翻开之后,打算开始学习,为下步工作准备:
先记下几句话吧:

1.题目关键不在于答案,在于思考问题的方法。

2.微软职位:1AR 协助研究员2,DEV 软件开发工程师3,TEST 测试工程师 4,RSDE 我认为就是在AR和DEV之间的一类职位吧,兼具有之。

3.较为看重同学的程序设计思路如何,编程风格,细节考虑,有无内存泄露,是否采用最优算法,程序能够根据需求修改,能否举一反三。

4.药灵丸不大,棋妙子不多。意思是说,程序小巧灵活,能体现出编程之美。

5.纸上得来终觉浅,绝知此事要躬行,一定要践行代码,纸上写代码。

6.画意能达万言,意思就是说图比文字更有说服力,我们老师常说的一句话就是有图有真相。意思类似。

7.面试时,一般是先提供一个简单的方法,然后,再根据此试图找到一个更好的解决方法。


第一个问题 如何指挥CPU的占有率

基本思路是首先分析出什么样的代码会完全占用CPU,答案是死循环。其次,什么样的代码会不占用CPU,答案是睡眠。 这样通过控制睡眠和死循环代码的执行时间,就可以控制CPU的占有率。甚至能够动态地画出正玹曲线。

#include"stdio.h"
#include"windows.h"//sleep 所在头文件
#include"math.h"
#include"stdlib.h"
#include"windef.h"
int main()
{

	//for(;;);
	/*---------1-1--------------
	for(;;)//死循环 一半的时间
	{
	for(int i=0;i<9600000;i++) ;
	Sleep(10);
	}
	return 0;
	--------------------------------*/
	/**************通过busyTime和idleTime调节*********
	const DWORD busyTime=10;
	const DWORD idleTime=busyTime;
	_int64 startTime=0;
	while(1)
	{
		DWORD startTime=GetTickCount();//获取系统启动到现在的时间
		//busy
		while(GetTickCount()-startTime<busyTime) ;//记录时间
		//idle
		Sleep(idleTime);
	}
	return 0;
	************************/

/************************正宣曲线****************	
	const double PI=3.1415926;
	const int Sincount=200;//一个2 PI周期进行200次采样
	const DWORD SinTime=300;//每300ms进行一次采样,即1分钟为一个正周期

	DWORD busyTime[Sincount];//记录每一次采样的忙碌时间 SinTime-busyTime即是休闲时间

	//依次200次采样的计算忙碌时间

	for(int i=0;i<Sincount;i++)
	{
		busyTime[i]=(DWORD)(SinTime/2+SinTime/2*sin(2*PI*i/Sincount));
	}

	//循环正玄曲线

	for(int j=0;;j=(j+1)%Sincount)
	{
		DWORD startTime=GetTickCount();
		while(GetTickCount()-startTime<busyTime[j]) ;

		Sleep(SinTime-busyTime[j]);
	}
	return 0;
************************************************/
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值